export default {
    /**
     * 获取列表数据 请求可以参考供应商列表模块
     *
     * 页面data对象配置 ：
     *    listField Object 属性如下  必选  默认为 listField
     *                 module 请求的模块  位于 api 下 如：home   必选
     *                 api    请求的模块的方法名  位于 api 下 如：home下的homeIndex   必选
     *                 data   数据保存的字段  选填  默认：list
     *                 loading   loading的字段
     * obj Object 属性如下：
     *            that 页面的this对象  必选
     *            key 页面data的listField的配置 默认是listField,如果多个请求，可以写其他的字段
     *            hasLoading 接口请求时，是否需要loading
     *
     *            handler  Function 选填  额外处理处理数据的方法   该方法需要返回 data 数据
     *            complete  Function 选填  完成的方法   方法返回 data 数据
     *            error     Function 选填  请求错误   方法返回 错误信息
     * */
    handleFetchListData: async function (obj, key, hasLoading) {
        let $wxData = obj.that.data;
        if ($wxData.hasOwnProperty(key)) {
            const $loading = $wxData[key]['loading'] || 'loading';
            if ($wxData[$loading] === true) return;
            $wxData[$loading] = true;
            try {
                const apiField = $wxData[key];
                const module = apiField['module']; // 模块
                const api = apiField['api']; // api
                const $search = $wxData[key].search || 'searchParams';
                if (!$wxData[$search].hasOwnProperty('PageSize')) { //  默认请求20条
                    $wxData[$search]['PageSize'] = 20;
                }
                let res = await wx.$Api[module][api]({ data: { ...$wxData[$search] }, hasLoading });
                console.log('res===', res);
                $wxData[$loading] = false;
                let $data = res.Data;
                if (obj.hasOwnProperty('handler') && obj.handler instanceof Function) { //额外处理
                    $data = obj.handler($data);
                }
                let $setData = $wxData[key].data || 'list'; // 绑定数据的字段
                let $loaded = $wxData[key].loaded || 'loaded'; // 是否加载完成的字段
                // 移除当前页数之后的数据
                if ($wxData[$setData].length > $wxData[$search].PageIndex) {
                    $wxData[$setData].splice($wxData[$search].PageIndex, $wxData[$setData].length)
                }
                // 更新当前页数据
                $wxData[$setData][$wxData[$search].PageIndex - 1] = $data.List
                const total = $wxData[$search].PageIndex * $wxData[$search].PageSize
                const $isLoaded = total >= Number($data['Total'])
                obj.that.setData({
                    [$setData]: $wxData[$setData],
                    [$loaded]: $isLoaded
                })
                if (!$isLoaded) { // 如果不是最后一页那么页数++
                    $wxData[$search].PageIndex++;
                    obj.that.setData({
                        [$search]: $wxData[$search]
                    })
                }
                // 完成之后的方法
                if (obj.hasOwnProperty('complete') && obj.complete instanceof Function) { //额外处理
                    obj.complete($data);
                }
            } catch (e) {
                $wxData[$loading] = false;
                if (obj.hasOwnProperty('error') && obj.error instanceof Function) { //额外处理错误信息
                    obj.error(e);
                }
            }
        }
    },

    /**
     *页面data对象配置 ：
     *      apiField Object 属性如下  必选  默认为apiField
     *                 module 请求的模块  位于 api 下 如：home   必选
     *                 api    请求的模块的方法名  位于 api 下 如：home下的homeIndex   必选
     *                 data   数据保存的字段  选填  默认：result
     * obj Object 属性如下：
     *            that 页面的this对象  必选
     *            key 页面data的apiField的配置 默认是apiField,如果多个请求，可以写其他的字段
     *            hasLoading 接口请求时，是否需要loading
     *
     *            handler  Function 选填  额外处理处理数据的方法   该方法需要返回 data 数据
     *            complete  Function 选填  完成的方法   方法返回 data 数据
     *            error     Function 选填  请求错误   方法返回 错误信息
     * */
    handleFetchData: async function (obj, key, hasLoading) {
        let $wxData = obj.that.data;
        if ($wxData.hasOwnProperty(key)) {
            try {
                const apiField = $wxData[key];
                const module = apiField['module']; // 模块
                const api = apiField['api']; // api
                const search = apiField.hasOwnProperty('search') ? apiField.search : $wxData.searchParams; // 搜索参数
                let res = await wx.$Api[module][api]({ data: { ...search }, hasLoading });
                let $data = res.Data;
                if (obj.hasOwnProperty('handler') && obj.handler instanceof Function) { //额外处理
                    $data = obj.handler($data);
                }
                let $setData = $wxData[key].data || 'result';
                let $loaded = $wxData[key].loaded || 'loaded'; // 是否加载完成的字段
                obj.that.setData({
                    [$setData]: $data,
                    [$loaded]: true
                })
                // 完成之后的方法
                if (obj.hasOwnProperty('complete') && obj.complete instanceof Function) { //额外处理
                    obj.complete($data);
                }
            } catch (e) {
                console.error('报错信息：', e)
                if (obj.hasOwnProperty('error') && obj.error instanceof Function) { //额外处理错误信息
                    obj.error(e);
                }
            }
        }
    }
}